/**
* @param { * } file input选择后返回的file对象
* @result 图片格式：JPEG、JPG、PNG、BMP、GIF。 图片大小：小于3MB。 图片分辨率：大于15×15，小于4096×4096(aliyun ocr 格式要求)
*/
export const compressImage = (file) => {
  // 参数file,是通过input 选择本地文件获取的
  return new Promise((resolve, reject) => {
    const { type, name, size } = file
    let img = new Image()

    // 创建一个reader实例
    let reader = new FileReader()

    // 读取拿到的文件
    reader.readAsDataURL(file)
    reader.onload = (e) => {

      // 文件加载成功后去转成Img对象，为了拿到图片的原始宽高
      img.src = e.target.result
      img.onload = () => {
        // 创建画布canvas
        let canvas = document.createElement('canvas')
        let content = canvas.getContext('2d')
        let quality = 0.8 // 图片质量，0.8 是文件压缩程度

        // 设置画布的宽高
        let width = img.width // 图片原宽度
        let height = img.height
        let ratio = height / width

        if (width > 1024 || height > 1024) {
          width = 1024
          height = width * ratio
          while (height >= 4096) {
            let num = height - 4096 > 1000 ? 100 : 10
            width = width - num
            height = width * ratio
          }
        }
        canvas.width = width
        canvas.height = height


        // 将图片画在画布上
        content.drawImage(img, 0, 0, canvas.width, canvas.height)

        //画布转成blob格式的图片
        canvas.toBlob((blob) => {
          // blob 格式的图片 转成file对象，这里主要看接口支不支持blob格式的文件上传，如果支持就没有必要转
          let file = new File([blob], name, { type: type, size: size })
          resolve({ type: type, compressFile: file })
        },
          `image/${type.split('/')[1]}`, quality
        )

      }
    }
  })
}
